import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DateUtil;


import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.sql.SQLException;


/**
 * Created by Волков Олег on 18.04.14.
 * Класс для работы с данными.
 */
public class WriteDataManager implements PrepareTable {
    /**
     * Метод для выгрузки данынх из БД
     */
    public List<Field> getData_fromMySQL() {
        // Ссылка на коллекцию
        ArrayList<Field> result = null;
        try {
            // Установка соединения с БД
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/goods";
            Connection con = (Connection) DriverManager.getConnection(url, "test", "12345");
            // Формирование запроса на языке MySQL
            String sql_query = "SELECT * FROM goods.table1";
            // Выполнение запроса sql_query
            java.sql.Statement statement = con.createStatement();
            ResultSet resultSet = statement.executeQuery(sql_query);
            // Инициализация коллекции result
            result = new ArrayList<Field>();
            // Добавление результата выполнения запроса sql_query в коллекцию result
            while (resultSet.next()) {
                Field field = new Field();
                field.setName(resultSet.getString(1));
                field.setDescriotion(resultSet.getString(2));
                field.setPrice(resultSet.getDouble(3));
                result.add(field);
            }
            con.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * Метод для загрузки данных в Excel-файл
     */
    public void putData_intoExcel(ArrayList<Field> fieldArrayList, String filename) {
        WriteDataManager wdm = new WriteDataManager();
        HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
        HSSFSheet sheet = hssfWorkbook.createSheet("1");
        // В цикле формируется форма для загрузки результатов в Excel-файл
        wdm.prepareTable(filename, sheet);
        int i = 1;
        for (Field field : fieldArrayList) {
            HSSFRow row = sheet.createRow(i);
            row.createCell(0).setCellValue(field.getName());
            row.createCell(1).setCellValue(field.getDescriotion());
            row.createCell(2).setCellValue(field.getPrice());
            Cell cell = row.createCell(3);
            cell.setCellValue(field.getDate().getTime().toString());
            i++;
        }
        // Имя файла, в который будет происходить запись и путь к нему
        try {
            FileOutputStream file = new FileOutputStream(filename);
            // Запись
            hssfWorkbook.write(file);
            // Закрытие потока
            file.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void prepareTable(String filename, HSSFSheet sheet) {
        HSSFRow row = sheet.createRow(0);
        row.createCell(0).setCellValue("Название товара");
        row.createCell(1).setCellValue("Описание товара");
        row.createCell(2).setCellValue("Цена товара");
        row.createCell(3).setCellValue("Дата");
    }
}
